package Question8_3; import java.util.*; public class Question { public static ArrayList<ArrayList<Integer>> getSubsets(ArrayList<Integer> set, int index) { ArrayList<ArrayList<Integer>> allsubsets; if (set.size() == index) { allsubsets = new ArrayList<ArrayList<Integer>>(); allsubsets.add(new ArrayList<Integer>()); // Empty set } else { allsubsets = getSubsets(set, index + 1); int item = set.get(index); ArrayList<ArrayList<Integer>> moresubsets = new ArrayList<ArrayList<Integer>>(); for (ArrayList<Integer> subset : allsubsets) { ArrayList<Integer> newsubset = new ArrayList<Integer>(); newsubset.addAll(subset); // newsubset.add(item); moresubsets.add(newsubset); } allsubsets.addAll(moresubsets); } return allsubsets; } public static ArrayList<ArrayList<Integer>> getSubsets2(ArrayList<Integer> set) { ArrayList<ArrayList<Integer>> allsubsets = new ArrayList<ArrayList<Integer>>(); int max = 1 << set.size(); for (int i = 0; i < max; i++) { ArrayList<Integer> subset = new ArrayList<Integer>(); int k = i; int index = 0; while (k > 0) { if ((k & 1) > 0) subset.add(set.get(index)); k >>= 1; index++; } allsubsets.add(subset); } return allsubsets; } public static void main(String[] args) { ArrayList<Integer> list = new ArrayList<Integer>(); for (int i = 0; i < 3; i++) { list.add(i); } ArrayList<ArrayList<Integer>> subsets = getSubsets(list, 0); System.out.println(subsets.toString()); ArrayList<ArrayList<Integer>> subsets2 = getSubsets2(list); System.out.println(subsets2.toString()); } }